#include <iostream>
#include "Circulo.h"
#include "ExcepcionSVG.h"
#include <sstream>

using namespace std;

Circulo::Circulo(Coordenada pcentro,float pradio, int grosor, Color fondo, Color linea)
{	
	
	if (pradio >= 0.0)
	{
		radio = pradio;
	}
	else 
	{
		throw ExcepcionValorNoValido(pradio,"debe ser valor positivo, o cero");
	}	
	this->mover(pcentro);
	this->setGrosorLinea(grosor);
	
	if(fondo<17){ this->setFondo(fondo);}
	else {throw ExcepcionValorNoValido(fondo,"esta fuera del rango de color");}

	if(linea<17){ this->setLinea(linea);}
	else {throw ExcepcionValorNoValido(linea,"esta fuera del rango de color");}
	
}
	

Circulo::Circulo(const Circulo& nc):Figura2D(nc)
{
	radio=nc.radio;
}

Circulo::~Circulo()
{
	radio=0.0;
}

Circulo& 
Circulo::operator=(const Circulo& nc)
{
	if (this!=&nc)
	{
		Figura2D::operator=(nc);
		radio=nc.radio;
	}
	return *this;
}

void 
Circulo::leeEntrada(istream& is)
{
	Figura2D::leeEntrada(is);
	float r;
	is>>r;

	if(r<0)
	{
		throw ExcepcionValorNoValido(r, "debe ser positivo o cero");	
	}
	else 
	{
		setRadio(r);
	}
	
}

Circulo*
Circulo::clonar() const
{
	return new Circulo(*this);
}

void
Circulo::escalar( float escala)
{
	try
   {
      if(escala>0)
      {
         radio=(radio*escala)/100.0;
      }
      else
      {
         throw(ExcepcionValorNoValido(escala, "escala no valida"));
      }
   }
   catch(ExcepcionValorNoValido& ex)
   {
      cerr<<ex.what();
      throw;
   }
}

void 
Circulo::pintar(ostream& os) const
{
	char comilla='"';
	os<<"<circle cx="<<comilla<<this->getOrigen().getX()<<comilla<<" ";
	os<<"cy="<<comilla<<this->getOrigen().getY()<<comilla<<" "<<"r="<<comilla<<radio<<comilla<<" ";
	Figura2D::pintar(os);
	os<<" />";
}

Circulo*
Circulo::duplicar(const Coordenada& nc)
{
	Circulo* p=this->clonar();
	p->agrupada=false;
	p->mover(nc);
	return p;
}

ostream& operator<<(ostream& os ,const Circulo& c)
{
	c.pintar(os);
	return os;
}


